import { fileURLToPath, URL } from 'node:url';
import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from '@vant/auto-import-resolver';
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
// https://vitejs.dev/config/

export default defineConfig(({ mode }) => {
	const env = loadEnv(mode, process.cwd());
	return {
		// 配置环境变量目录
		// envDir: './env',
		// 部署的公共基础路径（即：BASE_URL）：静态资源路径改为相对路径，默认是绝对路径
		base: env.VITE_BASE_URL,
		plugins: [
			vue(),
			vueJsx(),
			vueSetupExtend(),
			Components({
				resolvers: [VantResolver()]
			})
		],
		resolve: {
			alias: {
				'@': fileURLToPath(new URL('./src', import.meta.url)),
				'@api': fileURLToPath(new URL('./src/api', import.meta.url)),
				'@assets': fileURLToPath(new URL('./src/api', import.meta.url)),
				'@components': fileURLToPath(new URL('./src/components', import.meta.url)),
				'@config': fileURLToPath(new URL('./src/config', import.meta.url)),
				'@directives': fileURLToPath(new URL('./src/directives', import.meta.url)),
				'@hooks': fileURLToPath(new URL('./src/hooks', import.meta.url)),
				'@http': fileURLToPath(new URL('./src/http', import.meta.url)),
				'@interfaces': fileURLToPath(new URL('./src/interfaces', import.meta.url)),
				'@router': fileURLToPath(new URL('./src/router', import.meta.url)),
				'@stores': fileURLToPath(new URL('./src/stores', import.meta.url)),
				'@styles': fileURLToPath(new URL('./src/styles', import.meta.url)),
				'@utils': fileURLToPath(new URL('./src/utils', import.meta.url)),
				'@views': fileURLToPath(new URL('./src/views', import.meta.url))
			}
		},
		// 构建选项配置：可根据情况自行配置
		build: {
			// 指定打包文件输出路径，打包至对应环境目录下，此处为dist/test/、dist/production/
			outDir: `./dist/${mode}/`,
			// 指定打包生成的静态资源文件存放路径
			assetsDir: 'static',
			// 配置静态资源小于10KB时，处理为base64格式，避免额外的网络请求
			assetsInlineLimit: 1024 * 10,
			// 启用css拆分配置
			cssCodeSplit: true,
			// 配置打包后不生成source map文件，节约资源
			sourcemap: false,
			// 配置禁用gzip压缩大小报告，提升打包时间
			reportCompressedSize: false,
			// 打包文件大小提示限制
			chunkSizeWarningLimit: 1500,
			// 自定义底层打包配置
			rollupOptions: {
				// 打包文件输出配置
				output: {
					// js、css、img等资源文件打包后自动分类存储、配置hash值清除缓存
					chunkFileNames: 'static/js/[name]-[hash].js',
					entryFileNames: 'static/js/[name]-[hash].js',
					assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
					// eslint-disable-next-line consistent-return
					manualChunks(id) {
						// 拆分文件
						if (id.includes('node_modules')) {
							const module1 = id.toString().split('node_modules/')[1];
							return module1 ? module1.split('/')[0].toString() : module1;
						}
					}
				}
			}
		},
		// 预处理器初始配置
		css: {
			modules: {
				// local自动添加样式名hash后缀  global保持样式名不变
				scopeBehaviour: 'local',
				// https://github.com/madyankin/postcss-modules#localsconvention
				// 模块导出小驼峰变量（）
				localsConvention: 'camelCaseOnly',
				// https://github.com/webpack/loader-utils#interpolatename
				// 样式名生成规则：本身名称__5位hash后缀
				generateScopedName: '[local]__[hash:base64:5]',
				// hash内容前缀
				hashPrefix: 'geek'
			},
			preprocessorOptions: {
				scss: {
					additionalData: '@import "src/styles/main.scss";'
				}
			},
			// 开发时是否启用sourcemap
			devSourcemap: false
		},
		server: {
			// 是否开启HTTPS
			https: false,
			// 设置 host: true才可以使用 Network的形式，以IP访问项目
			host: true,
			// 端口号
			port: 7070,
			// 是否自动打开浏览器
			open: false,
			// 跨域设置允许
			cors: true,
			// 端口被占用时，是否直接退出
			strictPort: false,
			// 开启热更新
			hmr: true,
			// 接口代理
			proxy: {
				// 代理到测试环境
				'/test': {
					target: 'https://szwh.test.daqsoft.com/api',
					secure: false,
					changeOrigin: true,
					// 路径重写
					rewrite: (path: string) => path.replace(/^\/test/, '')
				},
				// 代理到后台开发人员环境
				'/develop': {
					// 开发的时候链接的后台开发人员地址，ip改为对应后台开发的ip
					// target: 'http://10.252.251.170:8007/',
					target: 'https://szwh.test.daqsoft.com/api',
					secure: false,
					changeOrigin: true,
					// 路径重写
					rewrite: (path: string) => path.replace(/^\/develop/, '')
				}
			}
		}
	};
});
